코딩테스트 연습 - 약수의 개수와 덧셈 | 프로그래머스 스쿨

[ 템플릿 코드 ]

#include <string>
#include <vector>
 
using namespace std;
 
int solution(int left, int right) {
    int answer = 0;
    return answer;
}

[ 풀이 ]

int solution(int left, int right)
{
    int answer = 0;
 
    for (int i = left; i <= right; i++)
    {
        int count = 0;
 
        for (int j = 1; j <= i; j++)
        {
            if (i % j == 0)
            {
                count++;
            }
        }
 
        if (count % 2 == 0)
        {
            answer += i;
        }
        else
        {
            answer -= i;
        }
    }
 
    return answer;
}

[ 해설 ]

int solution(int left, int right)
{
    // 최종 결과를 저장할 변수
    int answer = 0;
 
    // left부터 right까지 모든 숫자를 하나씩 확인
    for (int i = left; i <= right; i++)
    {
        // 현재 숫자(i)의 약수 개수를 저장할 변수
        int count = 0;
 
        // 1부터 i까지 반복하면서 약수를 찾음
        for (int j = 1; j <= i; j++)
        {
            // i를 j로 나누었을 때 나머지가 0이면
            // j는 i의 약수
            if (i % j == 0)
            {
                // 약수 개수 1 증가
                count++;
            }
        }
 
        // 약수의 개수가 짝수라면
        if (count % 2 == 0)
        {
            // 현재 숫자를 결과에 더함
            answer += i;
        }
        // 약수의 개수가 홀수라면
        else
        {
            // 현재 숫자를 결과에서 뺌
            answer -= i;
        }
    }
 
    // 최종 계산 결과 반환
    return answer;
}

[ 타 답안 ]

#include <cmath> // sqrt() 함수를 사용하기 위해 포함
 
int solution(int left, int right)
{
    // 최종 결과를 저장할 변수
    int answer = 0;
 
    // left부터 right까지 모든 숫자를 하나씩 확인
    for (int i = left; i <= right; i++)
    {
        // sqrt(i)는 i의 제곱근을 구함
        // (int)sqrt(i)는 제곱근의 소수 부분을 버림
 
        // 만약 제곱근이 정수라면
        // 예)
        // sqrt(16) = 4
        // (int)sqrt(16) = 4
        // 값이 같으므로 조건 참
 
        // sqrt(15) = 3.87298...
        // (int)sqrt(15) = 3
        // 값이 다르므로 조건 거짓
        if (sqrt(i) == (int)sqrt(i))
        {
            // 완전제곱수인 경우
            // 약수의 개수가 홀수이므로 빼기
            answer -= i;
        }
        else
        {
            // 완전제곱수가 아닌 경우
            // 약수의 개수가 짝수이므로 더하기
            answer += i;
        }
    }
 
    // 최종 결과 반환
    return answer;
}

C++ CodingTest